package stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 1. joining可以将stream中的元素用特定的连接符（没有的话，则直接连接）连接成一个字符串。
 * 2. Collectors类提供的reducing方法，相比于stream本身的reduce方法，增加了对自定义归约的支持。
 * @author Hongliang Zhu
 * @create 2021-08-01 16:24
 */
public class Demo10 {

    public static void main(String[] args) {
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("Tom", 8900, 23, "male", "New York"));
        personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
        personList.add(new Person("Lily", 7800, 21, "female", "Washington"));

        String names = personList.stream().map(p -> p.getName()).collect(Collectors.joining(","));
        System.out.println("所有员工的姓名：" + names);
        List<String> list = Arrays.asList("A", "B", "C");
        String string = list.stream().collect(Collectors.joining("-"));
        System.out.println("拼接后的字符串：" + string);



        // 每个员工减去起征点后的薪资之和（这个例子并不严谨，但一时没想到好的例子）
        Integer sss = personList.stream().collect(Collectors.reducing(0, Person::getSalary, (x, y) -> x + y - 5000));
        System.out.println(sss);
        // stream的reduce
        Optional<Integer> sum2 = personList.stream().map(Person::getSalary).reduce(Integer::sum);
        System.out.println("员工薪资总和：" + sum2.get());

        System.out.println(23700 - 8700);

    }
}
